/***************************************************************************
 *   Copyright (C) 2007 by Marcin Swiechowicz   *
 *   marcin.swiechowicz@gmail.com   *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
#include "kdcstandardkprocessjob.h"

#include <kdclib.h>
#include <QDebug>

KDCStandardKProcessJob::KDCStandardKProcessJob( QObject *parent ) : KDCAbstractKProcessJob( parent )
{

}

KDCStandardKProcessJob::~KDCStandardKProcessJob()
{

}

void KDCStandardKProcessJob::start()
{
	emit jobProgram( program() );
	if ( !startupMessage().isEmpty() )
		emit infoMessage( this, startupMessage() );

	QStringList arg = arguments();
	if ( !p_file.isEmpty() )
		arg << p_file;
	if ( !flag( 2 ) )
	{
		if ( isInRange( niceLevel(), -20, 19 ) )
			process()->setProgram( "nice", QStringList() << "-n" << QString::number( niceLevel() ) << program() << arg );
		else
			process()->setProgram( program(), arg );
	}
	else
	{
		QStringList list;
		list << program() << arg;
		if ( isInRange( niceLevel(), -20, 19 ) )
		{
			list.prepend( QString::number( niceLevel() ) );
			list.prepend( "-n" );
			list.prepend( "nice" );
		}
		process()->setShellCommand( list.join(" ").toUtf8() );
	}
	process()->start();
}

void KDCStandardKProcessJob::processFinished( int code, QProcess::ExitStatus status )
{
	if ( status == QProcess::CrashExit && !flag( 1 ) )
		setStandardErrorMessage( code );
	else
		if ( !flag( 1 ) )
		{
			if ( !endingMessage().isEmpty() )
				emit infoMessage( this, endingMessage() );
			setPercent( 100 );
		}
	emitResult();
}

void KDCStandardKProcessJob::readyReadProcessOutput()
{
	QString text( process()->readAllStandardOutput() );
	qDebug() << text;
	setFlag( 1, TRUE );
	setError( -1 );
	setErrorText( text );
	process()->close();
}

void KDCStandardKProcessJob::workAsShell( bool mode )
{
	setFlag( 2, mode );
}

void KDCStandardKProcessJob::setOutputFile( const QString& file )
{
	p_file = file;
}

void KDCStandardKProcessJob::readyReadProcessError()
{
    qDebug() << "dddffffffffffff";
    qDebug() << QString( process()->readAllStandardOutput() );
}
